// 考察对于信号处理方式的理解， 考察signal函数的使用
// 2.要求：自定义处理函数名称为“sigcb”, 在sigcb当中完成打印触发本次事件的信号值

// #include<iostream>
// #include<signal.h>
// #include<unistd.h>

// using namespace std;

// void sigcb(int signo)
// {
//     cout<<"捕捉信号为："<<signo<<endl;
// }

// int main()
// {

//     // for(int i=1;i<=31;i++)
//     // {
//     //     signal(i,sigcb);
//     // }
//     struct sigaction newact;
//     newact.sa_handler=sigcb;

//     for(int i=1;i<=31;i++)
//     {
//         sigaction(i,&newact,nullptr);
//     }

//     while(1)
//     {
//         sleep(1);
//     }
//     return 0;
// }

// 1.考察对信号阻塞的理解， 考察对可靠信号和非可靠信号的理解，考察sigprocmask函数的使用
// 2.要求：阻塞2号信号和40号信号， 分别给进程发送5次2号信号和5次40号信号，观察结果

#include<iostream>
#include<unistd.h>
#include<signal.h>

using namespace std;

int main()
{
    sigset_t s;
    sigemptyset(&s);
    sigaddset(&s,2);
    sigaddset(&s,40);
    sigprocmask(SIG_BLOCK,&s,nullptr);
    int cnt1=5,cnt2=5;
    while(cnt1--)
    {
        kill(getpid(),2);
        sleep(1);
        cout<<"2"<<endl;
    }
    while(cnt2--)
    {
        kill(getpid(),40);
        sleep(1);
        cout<<"40"<<endl;
    }
    return 0;
}